home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1994 November: Tool Chest / Dev.CD Nov 94.toast / Tool Chest / !Interfaces / Universal Interfaces 2.0a1 / PInterfaces / OSUtils.p < prev    next >
Encoding:
Text File  |  1994-07-21  |  13.4 KB  |  534 lines  |  [TEXT/MPS ]

  1. {
  2.      File:        OSUtils.p
  3.  
  4.      Copyright:    © 1984-1994 by Apple Computer, Inc.
  5.                  All rights reserved.
  6.  
  7.      Version:    Universal Interfaces 2.0a1.1  ETO #15, MPW prerelease.  Sunday, July 17, 1994. 
  8.  
  9.      Bugs?:        If you find a problem with this file, send the file and version
  10.                  information (from above) and the problem description to:
  11.  
  12.                      Internet:    apple.bugs@applelink.apple.com
  13.                      AppleLink:    APPLE.BUGS
  14.  
  15. }
  16.  
  17. {$IFC UNDEFINED UsingIncludes}
  18. {$SETC UsingIncludes := 0}
  19. {$ENDC}
  20.  
  21. {$IFC NOT UsingIncludes}
  22.  UNIT OSUtils;
  23.  INTERFACE
  24. {$ENDC}
  25.  
  26. {$IFC UNDEFINED __OSUTILS__}
  27. {$SETC __OSUTILS__ := 1}
  28.  
  29. {$I+}
  30. {$SETC OSUtilsIncludes := UsingIncludes}
  31. {$SETC UsingIncludes := 1}
  32.  
  33.  
  34. {$IFC UNDEFINED __TYPES__}
  35. {$I Types.p}
  36. {$ENDC}
  37. {    ConditionalMacros.p                                            }
  38.  
  39. {$IFC UNDEFINED __MIXEDMODE__}
  40. {$I MixedMode.p}
  41. {$ENDC}
  42.  
  43. {$PUSH}
  44. {$ALIGN MAC68K}
  45. {$LibExport+}
  46.  
  47. CONST
  48.     useFree                        = 0;
  49.     useATalk                    = 1;
  50.     useAsync                    = 2;
  51.     useExtClk                    = 3;                            {Externally clocked}
  52.     useMIDI                        = 4;
  53. { Environs Equates }
  54.     curSysEnvVers                = 2;                            {Updated to equal latest SysEnvirons version}
  55. { Machine Types }
  56.     envMac                        = -1;
  57.     envXL                        = -2;
  58.     envMachUnknown                = 0;
  59.     env512KE                    = 1;
  60.     envMacPlus                    = 2;
  61.     envSE                        = 3;
  62.     envMacII                    = 4;
  63.     envMacIIx                    = 5;
  64.     envMacIIcx                    = 6;
  65.     envSE30                        = 7;
  66.     envPortable                    = 8;
  67.     envMacIIci                    = 9;
  68.     envMacIIfx                    = 11;
  69. { CPU types }
  70.     envCPUUnknown                = 0;
  71.  
  72.     env68000                    = 1;
  73.     env68010                    = 2;
  74.     env68020                    = 3;
  75.     env68030                    = 4;
  76.     env68040                    = 5;
  77. { Keyboard types }
  78.     envUnknownKbd                = 0;
  79.     envMacKbd                    = 1;
  80.     envMacAndPad                = 2;
  81.     envMacPlusKbd                = 3;
  82.     envAExtendKbd                = 4;
  83.     envStandADBKbd                = 5;
  84.     envPrtblADBKbd                = 6;
  85.     envPrtblISOKbd                = 7;
  86.     envStdISOADBKbd                = 8;
  87.     envExtISOADBKbd                = 9;
  88.     false32b                    = 0;                            {24 bit addressing error}
  89.     true32b                        = 1;                            {32 bit addressing error}
  90. { result types for RelString Call }
  91.     sortsBefore                    = -1;                            {first string < second string}
  92.     sortsEqual                    = 0;                            {first string = second string}
  93.     sortsAfter                    = 1;                            {first string > second string}
  94.  
  95. { Toggle results }
  96.     toggleUndefined                = 0;
  97.     toggleOK                    = 1;
  98.     toggleBadField                = 2;
  99.     toggleBadDelta                = 3;
  100.     toggleBadChar                = 4;
  101.     toggleUnknown                = 5;
  102.     toggleBadNum                = 6;
  103.     toggleOutOfRange            = 7;                            {synonym for toggleErr3}
  104.     toggleErr3                    = 7;
  105.     toggleErr4                    = 8;
  106.     toggleErr5                    = 9;
  107. { Date equates }
  108.     smallDateBit                = 31;                            {Restrict valid date/time to range of Time global}
  109.     togChar12HourBit            = 30;                            {If toggling hour by char, accept hours 1..12 only}
  110.     togCharZCycleBit            = 29;                            {Modifier for togChar12HourBit: accept hours 0..11 only}
  111.     togDelta12HourBit            = 28;                            {If toggling hour up/down, restrict to 12-hour range (am/pm)}
  112.     genCdevRangeBit                = 27;                            {Restrict date/time to range used by genl CDEV}
  113.     validDateFields                = -1;
  114.     maxDateField                = 10;
  115.     eraMask                        = $0001;
  116.     yearMask                    = $0002;
  117.     monthMask                    = $0004;
  118.     dayMask                        = $0008;
  119.     hourMask                    = $0010;
  120.     minuteMask                    = $0020;
  121.     secondMask                    = $0040;
  122.     dayOfWeekMask                = $0080;
  123.     dayOfYearMask                = $0100;
  124.     weekOfYearMask                = $0200;
  125.     pmMask                        = $0400;
  126.     dateStdMask                    = $007F;                        {default for ValidDate flags and ToggleDate TogglePB.togFlags}
  127.  
  128.     eraField                    = 0;
  129.     yearField                    = 1;
  130.     monthField                    = 2;
  131.     dayField                    = 3;
  132.     hourField                    = 4;
  133.     minuteField                    = 5;
  134.     secondField                    = 6;
  135.     dayOfWeekField                = 7;
  136.     dayOfYearField                = 8;
  137.     weekOfYearField                = 9;
  138.     pmField                        = 10;
  139.     res1Field                    = 11;
  140.     res2Field                    = 12;
  141.     res3Field                    = 13;
  142.  
  143.     
  144. TYPE
  145. LongDateField = SignedByte;
  146.  
  147.  
  148. CONST
  149.     dummyType                    = 0;
  150.     vType                        = 1;
  151.     ioQType                        = 2;
  152.     drvQType                    = 3;
  153.     evType                        = 4;
  154.     fsQType                        = 5;
  155.     sIQType                        = 6;
  156.     dtQType                        = 7;
  157.     nmType                        = 8;
  158.  
  159.     
  160. TYPE
  161. QTypes = SignedByte;
  162.  
  163.  
  164. CONST
  165.     OSTrap                        = 0;
  166.     ToolTrap                    = 1;
  167.  
  168.     
  169. TYPE
  170. TrapType = SignedByte;
  171.  
  172.     SysParmType = PACKED RECORD
  173.         valid:                    UInt8;
  174.         aTalkA:                    UInt8;
  175.         aTalkB:                    UInt8;
  176.         config:                    UInt8;
  177.         portA:                    INTEGER;
  178.         portB:                    INTEGER;
  179.         alarm:                    LONGINT;
  180.         font:                    INTEGER;
  181.         kbdPrint:                INTEGER;
  182.         volClik:                INTEGER;
  183.         misc:                    INTEGER;
  184.     END;
  185.     SysPPtr = ^SysParmType;
  186.  
  187.     QElemPtr = ^QElem;
  188.  
  189.     QElem = RECORD
  190.         qLink:                    QElemPtr;
  191.         qType:                    INTEGER;
  192.         qData:                    ARRAY [0..0] OF INTEGER;
  193.     END;
  194.     QHdrPtr = ^QHdr;
  195.  
  196.     QHdr = RECORD
  197.         qFlags:                    INTEGER;
  198.         qHead:                    QElemPtr;
  199.         qTail:                    QElemPtr;
  200.     END;
  201.     {
  202.         DeferredTaskProcPtr uses register based parameters on the 68k and cannot
  203.         be written in or called from a high-level language without the help of
  204.         mixed mode or assembly glue.
  205.  
  206.         In:
  207.          => dtParam         A1.L
  208.     }
  209.     DeferredTaskProcPtr = ProcPtr;  { PROCEDURE DeferredTask(dtParam: LONGINT); }
  210.     DeferredTaskUPP = UniversalProcPtr;
  211.  
  212.     DeferredTask = RECORD
  213.         qLink:                    QElemPtr;
  214.         qType:                    INTEGER;
  215.         dtFlags:                INTEGER;
  216.         dtAddr:                    DeferredTaskUPP;
  217.         dtParam:                LONGINT;
  218.         dtReserved:                LONGINT;
  219.     END;
  220.     DeferredTaskPtr = ^DeferredTask;
  221.  
  222.     SysEnvRec = RECORD
  223.         environsVersion:        INTEGER;
  224.         machineType:            INTEGER;
  225.         systemVersion:            INTEGER;
  226.         processor:                INTEGER;
  227.         hasFPU:                    BOOLEAN;
  228.         hasColorQD:                BOOLEAN;
  229.         keyBoardType:            INTEGER;
  230.         atDrvrVersNum:            INTEGER;
  231.         sysVRefNum:                INTEGER;
  232.     END;
  233.     MachineLocation = RECORD
  234.         latitude:                Fract;
  235.         longitude:                Fract;
  236.         CASE INTEGER OF
  237.         0: (
  238.             dlsDelta:                    CHAR;                                {signed byte; daylight savings delta}
  239.            );
  240.         1: (
  241.             gmtDelta:                    LONGINT;                            {must mask - see documentation}
  242.            );
  243.     END;
  244.  
  245.     DateTimeRec = RECORD
  246.         year:                    INTEGER;
  247.         month:                    INTEGER;
  248.         day:                    INTEGER;
  249.         hour:                    INTEGER;
  250.         minute:                    INTEGER;
  251.         second:                    INTEGER;
  252.         dayOfWeek:                INTEGER;
  253.     END;
  254.     LongDateTime = wide;
  255.  
  256.     LongDateCvt = RECORD
  257.         CASE INTEGER OF
  258.         0: (
  259.             c:                            wide;
  260.            );
  261.         1: (
  262.             lHigh:                        UInt32;
  263.             lLow:                        UInt32;
  264.            );
  265.     END;
  266.  
  267.     LongDateRec = RECORD
  268.         CASE INTEGER OF
  269.         0: (
  270.             era:                        INTEGER;
  271.             year:                        INTEGER;
  272.             month:                        INTEGER;
  273.             day:                        INTEGER;
  274.             hour:                        INTEGER;
  275.             minute:                        INTEGER;
  276.             second:                        INTEGER;
  277.             dayOfWeek:                    INTEGER;
  278.             dayOfYear:                    INTEGER;
  279.             weekOfYear:                    INTEGER;
  280.             pm:                            INTEGER;
  281.             res1:                        INTEGER;
  282.             res2:                        INTEGER;
  283.             res3:                        INTEGER;
  284.            );
  285.         1: (
  286.             list:                        ARRAY [0..13] OF INTEGER;            {Index by LongDateField!}
  287.            );
  288.         2: (
  289.             eraAlt:                        INTEGER;
  290.             oldDate:                    DateTimeRec;
  291.            );
  292.     END;
  293.  
  294.     DateDelta = CHAR;
  295.  
  296.     TogglePB = RECORD
  297.         togFlags:                LONGINT;                                {caller normally sets low word to dateStdMask=$7F}
  298.         amChars:                ResType;                                {from 'itl0', but uppercased}
  299.         pmChars:                ResType;                                {from 'itl0', but uppercased}
  300.         reserved:                ARRAY [0..3] OF LONGINT;
  301.     END;
  302.     ToggleResults = INTEGER;
  303.  
  304. CONST
  305.     uppDeferredTaskProcInfo = $0000B802; { Register PROCEDURE (4 bytes in A1); }
  306.  
  307. FUNCTION NewDeferredTaskProc(userRoutine: DeferredTaskProcPtr): DeferredTaskUPP;
  308.     {$IFC NOT GENERATINGCFM }
  309.     INLINE $2E9F;
  310.     {$ENDC}
  311.  
  312. PROCEDURE CallDeferredTaskProc(dtParam: LONGINT; userRoutine: DeferredTaskUPP);
  313.     {$IFC NOT GENERATINGCFM}
  314.     {To be implemented:  Glue to move parameters into registers.}
  315.     {$ENDC}
  316.  
  317. PROCEDURE LongDateToSeconds(lDate: LongDateRec; VAR lSecs: LongDateTime);
  318.     {$IFC NOT GENERATINGCFM}
  319.     INLINE $2F3C, $8008, $FFF2, $A8B5;
  320.     {$ENDC}
  321. PROCEDURE LongSecondsToDate(VAR lSecs: LongDateTime; VAR lDate: LongDateRec);
  322.     {$IFC NOT GENERATINGCFM}
  323.     INLINE $2F3C, $8008, $FFF0, $A8B5;
  324.     {$ENDC}
  325. FUNCTION ToggleDate(VAR lSecs: LongDateTime; field: ByteParameter; delta: ByteParameter; ch: INTEGER; params: TogglePB): ToggleResults;
  326.     {$IFC NOT GENERATINGCFM}
  327.     INLINE $2F3C, $820E, $FFEE, $A8B5;
  328.     {$ENDC}
  329. FUNCTION ValidDate(vDate: LongDateRec; flags: LONGINT; VAR newSecs: LongDateTime): INTEGER;
  330.     {$IFC NOT GENERATINGCFM}
  331.     INLINE $2F3C, $820C, $FFE4, $A8B5;
  332.     {$ENDC}
  333. FUNCTION IsMetric: BOOLEAN;
  334.     {$IFC NOT GENERATINGCFM}
  335.     INLINE $3F3C, $0004, $A9ED;
  336.     {$ENDC}
  337. FUNCTION GetSysPPtr: SysPPtr;
  338.     {$IFC NOT GENERATINGCFM}
  339.     INLINE $2EBC, $0000, $01F8;
  340.     {$ENDC}
  341. FUNCTION ReadDateTime(VAR time: LONGINT): OSErr;
  342.     {$IFC NOT GENERATINGCFM}
  343.     INLINE $205F, $A039, $3E80;
  344.     {$ENDC}
  345. PROCEDURE GetDateTime(VAR secs: LONGINT);
  346.     {$IFC NOT GENERATINGCFM}
  347.     INLINE $205F, $20B8, $020C;
  348.     {$ENDC}
  349. FUNCTION SetDateTime(time: LONGINT): OSErr;
  350.     {$IFC NOT GENERATINGCFM}
  351.     INLINE $201F, $A03A, $3E80;
  352.     {$ENDC}
  353. PROCEDURE SetTime(d: DateTimeRec);
  354.     {$IFC NOT GENERATINGCFM}
  355.     INLINE $205F, $A9C7, $A03A;
  356.     {$ENDC}
  357. PROCEDURE GetTime(VAR d: DateTimeRec);
  358.     {$IFC NOT GENERATINGCFM}
  359.     INLINE $205F, $2038, $020C, $A9C6;
  360.     {$ENDC}
  361. PROCEDURE DateToSeconds(d: DateTimeRec; VAR secs: LONGINT);
  362. PROCEDURE SecondsToDate(secs: LONGINT; VAR d: DateTimeRec);
  363.     {$IFC NOT GENERATINGCFM}
  364.     INLINE $205F, $201F, $A9C6;
  365.     {$ENDC}
  366. PROCEDURE SysBeep(duration: INTEGER);
  367.     {$IFC NOT GENERATINGCFM}
  368.     INLINE $A9C8;
  369.     {$ENDC}
  370. FUNCTION DTInstall(dtTaskPtr: DeferredTaskPtr): OSErr;
  371.     {$IFC NOT GENERATINGCFM}
  372.     INLINE $205F, $A082, $3E80;
  373.     {$ENDC}
  374. {$IFC GENERATING68K }
  375. FUNCTION GetMMUMode : ByteParameter;
  376.     {$IFC NOT CFMSYSTEMCALLS}
  377.     INLINE $1EB8, $0CB2;            { MOVE.B $0CB2,(SP) }
  378.     {$ENDC}
  379.  
  380. PROCEDURE SwapMMUMode(VAR mode: SInt8);
  381.     {$IFC NOT GENERATINGCFM}
  382.     INLINE $205F, $1010, $A05D, $1080;
  383.     {$ENDC}
  384. {$ENDC}
  385. {$IFC SystemSixOrLater }
  386. FUNCTION SysEnvirons(versionRequested: INTEGER; VAR theWorld: SysEnvRec): OSErr;
  387.     {$IFC NOT GENERATINGCFM}
  388.     INLINE $205F, $301F, $A090, $3E80;
  389.     {$ENDC}
  390. {$ELSEC}
  391. FUNCTION SysEnvirons(versionRequested: INTEGER; VAR theWorld: SysEnvRec): OSErr;
  392. {$ENDC}
  393. PROCEDURE Delay(numTicks: LONGINT; VAR finalTicks: LONGINT);
  394.     {$IFC NOT GENERATINGCFM}
  395.     INLINE $225F, $205F, $A03B, $2280;
  396.     {$ENDC}
  397. {
  398.     GetTrapAddress and SetTrapAddress are obsolete and should not
  399.     be used. Always use NGetTrapAddress and NSetTrapAddress instead.
  400.     The old routines will not be supported for PowerPC apps.
  401. }
  402. {$IFC OLDROUTINENAMES  & NOT GENERATINGCFM }
  403. FUNCTION GetTrapAddress(trapNum: INTEGER): UniversalProcPtr;
  404.     {$IFC NOT GENERATINGCFM}
  405.     INLINE $301F, $A146, $2E88;
  406.     {$ENDC}
  407. PROCEDURE SetTrapAddress(trapAddr: UniversalProcPtr; trapNum: INTEGER);
  408.     {$IFC NOT GENERATINGCFM}
  409.     INLINE $301F, $205F, $A047;
  410.     {$ENDC}
  411. {$ENDC}
  412. FUNCTION NGetTrapAddress(trapNum: INTEGER; tTyp: ByteParameter): UniversalProcPtr;
  413. PROCEDURE NSetTrapAddress(trapAddr: UniversalProcPtr; trapNum: INTEGER; tTyp: ByteParameter);
  414. FUNCTION GetOSTrapAddress(trapNum: INTEGER): UniversalProcPtr;
  415.     {$IFC NOT GENERATINGCFM}
  416.     INLINE $301F, $A346, $2E88;
  417.     {$ENDC}
  418. PROCEDURE SetOSTrapAddress(trapAddr: UniversalProcPtr; trapNum: INTEGER);
  419.     {$IFC NOT GENERATINGCFM}
  420.     INLINE $301F, $205F, $A247;
  421.     {$ENDC}
  422. FUNCTION GetToolTrapAddress(trapNum: INTEGER): UniversalProcPtr;
  423.     {$IFC NOT GENERATINGCFM}
  424.     INLINE $301F, $A746, $2E88;
  425.     {$ENDC}
  426. PROCEDURE SetToolTrapAddress(trapAddr: UniversalProcPtr; trapNum: INTEGER);
  427.     {$IFC NOT GENERATINGCFM}
  428.     INLINE $301F, $205F, $A647;
  429.     {$ENDC}
  430. FUNCTION GetToolboxTrapAddress(trapNum: INTEGER): UniversalProcPtr;
  431.     {$IFC NOT GENERATINGCFM}
  432.     INLINE $301F, $A746, $2E88;
  433.     {$ENDC}
  434. PROCEDURE SetToolboxTrapAddress(trapAddr: UniversalProcPtr; trapNum: INTEGER);
  435.     {$IFC NOT GENERATINGCFM}
  436.     INLINE $301F, $205F, $A647;
  437.     {$ENDC}
  438. FUNCTION WriteParam: OSErr;
  439. PROCEDURE Enqueue(qElement: QElemPtr; qHeader: QHdrPtr);
  440.     {$IFC NOT GENERATINGCFM}
  441.     INLINE $225F, $205F, $A96F;
  442.     {$ENDC}
  443. FUNCTION Dequeue(qElement: QElemPtr; qHeader: QHdrPtr): OSErr;
  444.     {$IFC NOT GENERATINGCFM}
  445.     INLINE $225F, $205F, $A96E, $3E80;
  446.     {$ENDC}
  447. FUNCTION SetCurrentA5: LONGINT;
  448.     {$IFC NOT GENERATINGCFM}
  449.     INLINE $2E8D, $2A78, $0904;
  450.     {$ENDC}
  451. FUNCTION SetA5(newA5: LONGINT): LONGINT;
  452.     {$IFC NOT GENERATINGCFM}
  453.     INLINE $2F4D, $0004, $2A5F;
  454.     {$ENDC}
  455. {$IFC NOT SystemSevenOrLater }
  456. PROCEDURE Environs(VAR rom: INTEGER; VAR machine: INTEGER);
  457. {$ENDC}
  458. FUNCTION HandToHand(VAR theHndl: Handle): OSErr;
  459. FUNCTION PtrToXHand(srcPtr: UNIV Ptr; dstHndl: Handle; size: LONGINT): OSErr;
  460.     {$IFC NOT GENERATINGCFM}
  461.     INLINE $201F, $225F, $205F, $A9E2, $3E80;
  462.     {$ENDC}
  463. FUNCTION PtrToHand(srcPtr: UNIV Ptr; VAR dstHndl: Handle; size: LONGINT): OSErr;
  464. FUNCTION HandAndHand(hand1: Handle; hand2: Handle): OSErr;
  465.     {$IFC NOT GENERATINGCFM}
  466.     INLINE $225F, $205F, $A9E4, $3E80;
  467.     {$ENDC}
  468. FUNCTION PtrAndHand(ptr1: UNIV Ptr; hand2: Handle; size: LONGINT): OSErr;
  469.     {$IFC NOT GENERATINGCFM}
  470.     INLINE $201F, $225F, $205F, $A9EF, $3E80;
  471.     {$ENDC}
  472. FUNCTION InitUtil: OSErr;
  473.     {$IFC NOT GENERATINGCFM}
  474.     INLINE $A03F, $3E80;
  475.     {$ENDC}
  476. {$IFC GENERATING68K }
  477. FUNCTION SwapInstructionCache(cacheEnable: BOOLEAN): BOOLEAN;
  478. PROCEDURE FlushInstructionCache;
  479.     {$IFC NOT GENERATINGCFM}
  480.     INLINE $7001, $A098;
  481.     {$ENDC}
  482. FUNCTION SwapDataCache(cacheEnable: BOOLEAN): BOOLEAN;
  483. PROCEDURE FlushDataCache;
  484.     {$IFC NOT GENERATINGCFM}
  485.     INLINE $7003, $A098;
  486.     {$ENDC}
  487. PROCEDURE FlushCodeCache;
  488.     {$IFC NOT GENERATINGCFM}
  489.     INLINE $A0BD;
  490.     {$ENDC}
  491. PROCEDURE FlushCodeCacheRange(address: UNIV Ptr; count: LONGINT);
  492.     {$IFC NOT GENERATINGCFM}
  493.     INLINE $225F, $205F, $7009, $A098;
  494.     {$ENDC}
  495. {$ENDC}
  496. PROCEDURE ReadLocation(VAR loc: MachineLocation);
  497.     {$IFC NOT GENERATINGCFM}
  498.     INLINE $205F, $203C, $000C, $00E4, $A051;
  499.     {$ENDC}
  500. PROCEDURE WriteLocation(loc: MachineLocation);
  501.     {$IFC NOT GENERATINGCFM}
  502.     INLINE $205F, $203C, $000C, $00E4, $A052;
  503.     {$ENDC}
  504. {$IFC OLDROUTINENAMES }
  505. PROCEDURE LongDate2Secs(lDate: LongDateRec; VAR lSecs: LongDateTime);
  506.     {$IFC NOT GENERATINGCFM}
  507.     INLINE $2F3C, $8008, $FFF2, $A8B5;
  508.     {$ENDC}
  509. PROCEDURE LongSecs2Date(VAR lSecs: LongDateTime; VAR lDate: LongDateRec);
  510.     {$IFC NOT GENERATINGCFM}
  511.     INLINE $2F3C, $8008, $FFF0, $A8B5;
  512.     {$ENDC}
  513. FUNCTION IUMetric: BOOLEAN;
  514.     {$IFC NOT GENERATINGCFM}
  515.     INLINE $3F3C, $0004, $A9ED;
  516.     {$ENDC}
  517. PROCEDURE Date2Secs(d: DateTimeRec; VAR secs: LONGINT);
  518. PROCEDURE Secs2Date(secs: LONGINT; VAR d: DateTimeRec);
  519.     {$IFC NOT GENERATINGCFM}
  520.     INLINE $205F, $201F, $A9C6;
  521.     {$ENDC}
  522. {$ENDC}
  523.  
  524. {$ALIGN RESET}
  525. {$POP}
  526.  
  527. {$SETC UsingIncludes := OSUtilsIncludes}
  528.  
  529. {$ENDC} {__OSUTILS__}
  530.  
  531. {$IFC NOT UsingIncludes}
  532.  END.
  533. {$ENDC}
  534.